package accion;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import bean.Post;
import bean.Residente;
import bean.Respuesta;

public class PostAccion {

	private String rutaPost = "C:/BD/post.txt";
	private String rutaRespuesta = "C:/BD/respuesta.txt";
	private ArrayList<Post> listaPosts = new ArrayList<Post>();
	private ArrayList<Respuesta> listaRespuestas = new ArrayList<Respuesta>();
	ResidenteAccion residenteAccion = new ResidenteAccion();

	public ArrayList<Post> inicializarTablaPost() {

		residenteAccion.inicializarTablaResidente();

		FileReader fr = null;
		BufferedReader br = null;

		try {
			fr = new FileReader(rutaPost);
			br = new BufferedReader(fr);

			String linea;
			Post post = null;
			Residente residente = null;
			while ((linea = br.readLine()) != null) {
				String[] datos = linea.split("#");
				residente = new Residente(datos[4], null, null, null, -1, null,
						null);
				post = new Post(datos[0], datos[1], datos[2], datos[3],
						residenteAccion.obtenerResidente(residente));
				listaPosts.add(post);

			}

		} catch (FileNotFoundException e) {

			e.printStackTrace();
		} catch (IOException e) {

			e.printStackTrace();
		} finally {

			try {
				if (null != fr) {
					fr.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

		return listaPosts;

	}

	public Post obtenerPost(Post post) {

		for (Post postDeLista : listaPosts) {

			if (postDeLista.getCodigo().equals(post.getCodigo())) {
				return postDeLista;
			}

		}
		return null;
	}

	public ArrayList<Post> listarPostPorResidente(Residente residente) {

		ArrayList<Post> listarPostPorResidente = new ArrayList<Post>();

		for (Post postDeLista : listaPosts) {

			if (postDeLista.getResidente().getDni().equals(residente.getDni())) {
				listarPostPorResidente.add(postDeLista);
			}

		}

		return listarPostPorResidente;
	}

	public ArrayList<Respuesta> inicializarTablaRespuesta() {

		FileReader fr = null;
		BufferedReader br = null;

		try {
			fr = new FileReader(rutaRespuesta);
			br = new BufferedReader(fr);

			String linea;
			Respuesta respuesta = null;
			Residente residente = null;
			Post post = null;
			while ((linea = br.readLine()) != null) {

				String[] datos = linea.split("#");
				residente = new Residente(datos[0], null, null, null, -1, null,
						null);
				post = new Post(datos[3], null, null, null, null);
				respuesta = new Respuesta(residenteAccion
						.obtenerResidente(residente), datos[1], datos[2],
						obtenerPost(post));

				listaRespuestas.add(respuesta);

			}

		} catch (FileNotFoundException e) {

			e.printStackTrace();
		} catch (IOException e) {

			e.printStackTrace();
		} finally {

			try {
				if (null != fr) {
					fr.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

		return listaRespuestas;

	}

	public ArrayList<Respuesta> obtenerRespuestas(Post post) {
		ArrayList<Respuesta> listaRespuestaPorPost = new ArrayList<Respuesta>();

		for (Respuesta respuestaDeLista : listaRespuestas) {

			if (respuestaDeLista.getPost().getCodigo().equals(post.getCodigo())) {
				listaRespuestaPorPost.add(respuestaDeLista);
			}

		}

		return listaRespuestaPorPost;
	}

	public int registrarPost(Post post) {
		int ingreso = 0;
		try {
			listaPosts.add(post);
			ingreso = 1;
			actualizarTablaPost();
		} catch (Exception e) {
			ingreso = 0;
		}

		return ingreso;
	}

	public int registrarRespuesta(Respuesta respuesta) {

		int ingreso = 0;

		try {
			listaRespuestas.add(respuesta);
			ingreso = 1;
			actualizarTablaRespuesta();
		} catch (Exception e) {
			ingreso = 0;
		}

		return ingreso;
	}

	public void actualizarTablaPost() {
		try {
			PrintWriter pw = new PrintWriter(new FileWriter(rutaPost));

			for (Post postDeLista : listaPosts) {
				pw.println(postDeLista.getCodigo() + "#"
						+ postDeLista.getTitulo() + "#"
						+ postDeLista.getMensaje() + "#"
						+ postDeLista.getFecha() + "#"
						+ postDeLista.getResidente().getDni() + "#");
			}
			pw.close();

		} catch (Exception ex) {

		}
	}

	public void actualizarTablaRespuesta() {
		try {
			PrintWriter pw = new PrintWriter(new FileWriter(rutaRespuesta));

			for (Respuesta respuestaDeLista : listaRespuestas) {
				pw.println(respuestaDeLista.getResidente().getDni() + "#"
						+ respuestaDeLista.getFecha() + "#"
						+ respuestaDeLista.getRespuesta() + "#"
						+ respuestaDeLista.getPost().getCodigo() + "#"

				);
			}
			pw.close();

		} catch (Exception ex) {

		}
	}

}
